package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * JDBC Java DataBase Connectivity
 * java的数据库链接，是由Java官方提供的一套用于链接数据库的标准驱动接口
 * 不同的数据库厂商都提供了一套对应的实现类，我们称这套实现类为“驱动”
 *
 * 整体步骤
 * 1.项目根目录下的pom.xml文件加上MYSQL驱动的依赖
 *     <dependencies>
 *         <!-- 连接MySQL数据库的依赖 -->
 *         <dependency>
 *             <groupId>mysql</groupId>
 *             <artifactId>mysql-connector-java</artifactId>
 *             <version>8.0.15</version>
 *         </dependency>
 *     </dependencies>
 *
 *  2:按照下面代码步骤，测试与数据库链接
 */
public class JDBCDemo1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        /*
        使用JDBC链接数据库并操作的基本流程
        1.加载驱动
        2.使用DriverManager利用驱动与与数据库建立链接，得到Connection对象(连接对象)
        3.通过连接对象创建用于执行SQL语句的语句对象：Statement
        4.通过Statement执行SQL，如果执行的是DQL语句，则会得到查询结果集ResultSet
        5.遍历结果集得到查询内容
        6.与数据库断开连接
         */
        //1
        //不同数据库厂商实现的Driver接口的实现类包名和实现类名不完全一样
        Class.forName("com.mysql.cj.jdbc.Driver");//因为Java认为万一没有这个类 所以会报错  加载驱动

        //2
        Connection connection = DriverManager.getConnection(
                //数据库地址格式:jdbc:mysql://数据库IP:端口/数据库名?一堆参数
                "jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
                "root",//数据库用户名
                "root"//数据库密码
        );
        System.out.println("成功链接数据库!");

        //3
        Statement statement = connection.createStatement();//创建statement对象
        /*
              创建一张表
              CREATE TABLE userinfo(
                    id INT PRIMARY KEY AUTO_INCREMENT,
                    username VARCHAR(30),
                    password vARCHAR(30),
                    nickname vARCHAR(30),
                    age INT(3)
                 )
         */
        String sql ="CREATE TABLE userinfo(\n" +
                "                    id INT PRIMARY KEY AUTO_INCREMENT,\n" +
                "                    username VARCHAR(30),\n" +
                "                    password vARCHAR(30),\n" +
                "                    nickname vARCHAR(30),\n" +
                "                    age INT(3)\n" +
                "                 )";
        /*execute方法用于执行SQL语句
        boolean execute(String sql)
        执行完SQL语句有没有查询结果集 就是select语句 有才会true 其他都是false

        由于执行DML语句(INSERT，UPDATE，DELETE)和DQL语句(SELECT)有专门的方法
        因此execute方法通常仅用于执行DDL语句
         */
        statement.execute(sql);
        System.out.println("执行完毕!");

        //最终操作完毕与数据库断开链接
        connection.close();
    }
}
